package com.skcc.cop.mrtaxi;

import java.io.File;

import android.app.Application;
import android.content.Context;
import android.graphics.Bitmap.CompressFormat;
import android.view.LayoutInflater;

import com.nostra13.universalimageloader.cache.disc.impl.UnlimitedDiscCache;
import com.nostra13.universalimageloader.cache.disc.naming.HashCodeFileNameGenerator;
import com.nostra13.universalimageloader.cache.memory.impl.UsingFreqLimitedMemoryCache;
import com.nostra13.universalimageloader.core.DisplayImageOptions;
import com.nostra13.universalimageloader.core.ImageLoader;
import com.nostra13.universalimageloader.core.ImageLoaderConfiguration;
import com.nostra13.universalimageloader.core.assist.QueueProcessingType;
import com.nostra13.universalimageloader.core.download.BaseImageDownloader;
import com.nostra13.universalimageloader.utils.StorageUtils;

public class MrTaxiApplication extends Application {

	private static final String TAG = "MrTaxiApplication";
	
//	public static final String SERVER_URL = "http://10.250.182.94:8080/mrtaxi/";	
	public static final String SERVER_URL = "http://mrtaxi.biz/RestService/mrtaxi/";		// 외부 호스팅 주소
//	public static final String SERVER_URL = "http://192.168.43.96/RestService/mrtaxi/";
	private static LayoutInflater inflater;
    private static PreferenceManager prefManager;
    
    private ImageLoader imageLoader;
    

	@Override
	public void onCreate() {
		super.onCreate();
		
		inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
		
		patchEOFException();
	}
	
	/**
	 * 시스템 리소스가 부족할 때 애플리케이션이 추가로 메모리를 해제하는 기회를 준다. 
	 * 모든 백그라운드 프로세스가 종료되었는데도 메모리가 부족하면 호출됨
	 */
	@Override
	public void onLowMemory() {
		super.onLowMemory();
	}
	
	/**
	 *  애플리케이션 객체가 종료될 때 호출(항상 호출 된다는 보장을 할 수 없음)
	 * 리소스 회수를 위한 목적으로 커널에 의해 종료되는 경우 이 함수는 호출되지 않는다.
	 */
	@Override
	public final void onTerminate() {
		super.onTerminate();
	}
	
	// EOF 에러 방지를 위해서 사용한다.
	private void patchEOFException() {
        System.setProperty("http.keepAlive", "false");
    }
	
	public LayoutInflater getInflater()
    {
        return inflater;
    }	
	
	public PreferenceManager getPreferenceManager() {
		if(prefManager == null) {
			prefManager = new PreferenceManager(this);
		}
		return prefManager;
	}
	
	public ImageLoader getImageLoader() {
		if(imageLoader == null) {
			imageLoader = ImageLoader.getInstance();
			initImageLoader();
		}
		
		return imageLoader;
	}
	
	private void initImageLoader() {
    	File cacheDir = StorageUtils.getCacheDirectory(this);
    	ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(this)
    			.memoryCacheExtraOptions(720, 1280) // default = device screen dimensions
    			.discCacheExtraOptions(120, 120, CompressFormat.JPEG, 75, null)
    			.threadPoolSize(3) // default
    			.threadPriority(Thread.NORM_PRIORITY - 1) // default
    			.denyCacheImageMultipleSizesInMemory()
    			.memoryCache(new UsingFreqLimitedMemoryCache(2 * 1024 * 1024)) // default
    			.discCache(new UnlimitedDiscCache(cacheDir)) // default
    			.discCacheSize(50 * 1024 * 1024)
    			.discCacheFileCount(100)
    			.discCacheFileNameGenerator(new HashCodeFileNameGenerator()) // default
    			.imageDownloader(new BaseImageDownloader(this)) // default
    			.tasksProcessingOrder(QueueProcessingType.FIFO) // default
    			.defaultDisplayImageOptions(DisplayImageOptions.createSimple()) // default
    			.build();
    	
    	imageLoader.init(config);
	}
	
}
